#include "Vue.h"

t_motte** Vue_init() {
	/* S'occupe de l'initialisation de la matrice de pMotte */
   	int eLigne, eColonne;

	t_motte** pMotte;
	/* Allocation mémoire pour le tableau de sous-tableaux */
	pMotte = (t_motte**) malloc(elmax * sizeof(t_motte*));

	/* Allocation mémoire pour chaque sous-tableau de de structure */
	for (eLigne = 0; eLigne < elmax; eLigne++)
		pMotte[eLigne] = (t_motte*) malloc(ecmax * sizeof(t_motte));


	for (eLigne = 0; eLigne < elmax-1; eLigne++){
		for (eColonne = 0; eColonne < ecmax-1; eColonne++){
			pMotte[eLigne][eColonne].eEtatterre=Plein;
			pMotte[eLigne][eColonne].Nourriture=Vide;
			pMotte[eLigne][eColonne].ptNourriture=0;
			pMotte[eLigne][eColonne].eTaupes=0;
		}
	}	

	return pMotte;

}

void Vue_afficher(t_motte** pMotte, SDL_Surface* ecran) {
	/* Affiche le contenu de la scène */
   	int eLigne, eColonne;
	SDL_Rect position;

	for (eLigne = 0; eLigne < elmax; eLigne++){
		for (eColonne = 0; eColonne < ecmax; eColonne++){
			position.x = eColonne * TAILLE_BLOC;
			position.y = eLigne * TAILLE_BLOC;

			switch(pMotte[eLigne][eColonne].eEtatterre){
				case Pierre : 	SDL_BlitSurface(IMG_Load("./images/pierre.bmp"), NULL, ecran, &position);
							break;
				case Plein :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :	SDL_BlitSurface(IMG_Load("./images/plein.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position); 
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Moyen :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :  SDL_BlitSurface(IMG_Load("./images/moyen.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position); 
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Petit :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 :  SDL_BlitSurface(IMG_Load("./images/petit.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
				case Rien :	switch(pMotte[eLigne][eColonne].eTaupes){
							case 0 : 	SDL_BlitSurface(IMG_Load("./images/vide.bmp"), NULL, ecran, &position);
									break;
							case 1 : 	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
							case 2 :	SDL_BlitSurface(IMG_Load("./images/rattaupe2.bmp"), NULL, ecran, &position);
									break;
							case 3 :	SDL_BlitSurface(IMG_Load("./images/rattaupe3.bmp"), NULL, ecran, &position);
									break;
							default :	SDL_BlitSurface(IMG_Load("./images/rattaupe.bmp"), NULL, ecran, &position);
									break;
						}
						break;
			}

		}
	}
}

void Vue_Mort(int ePosX, int ePosY, SDL_Surface* ecran){
	/* Affiche à l'écran une image correspondant à la mort d'un rat-taupe */
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/tetemort.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Reproduction( int ePosX, int ePosY, SDL_Surface* ecran){
	/* Affiche à l'écran une image correspondant à la reproduction de 2 rats-taupes */
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/coeur.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Accouchement( int ePosX, int ePosY, SDL_Surface* ecran){
	/* Affiche à l'écran une image correspondant à l'accouchement d'un rat-taupe */
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/biberon.bmp"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Combat( int ePosX, int ePosY, SDL_Surface* ecran){
	SDL_Rect position;
	position.x = ePosY * TAILLE_BLOC;
	position.y = ePosX * TAILLE_BLOC;
	SDL_BlitSurface(IMG_Load("./images/fight.jpg"), NULL, ecran, &position);
	SDL_Flip(ecran);
}

void Vue_Palmares(SOCKET csockfin){
	/* Fonction s'occupant de la réception du palmarès et de son écriture dans un fichier */
	int32_t ePalmares[4][2];
	int32_t eNombreJoueur;
	int32_t eNombreJoueurCompteur;
	int32_t PalmTempSend;
	FILE* fichier;

	fichier = fopen("classement.txt", "w"); /* Créer le fichier en permission écriture */

	recv(csockfin, (char *)&eNombreJoueur, sizeof(eNombreJoueur), 0);
	eNombreJoueur = ntohl(eNombreJoueur);

	for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
		recv(csockfin, (char *)&PalmTempSend, sizeof(PalmTempSend), 0);
		ePalmares[eNombreJoueurCompteur][0]=ntohl(PalmTempSend);
		recv(csockfin, (char *)&PalmTempSend, sizeof(PalmTempSend), 0);
		ePalmares[eNombreJoueurCompteur][1]=ntohl(PalmTempSend);
	}
	
	if (fichier != NULL) /* si le fichier existe */
	{
		for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
			fprintf(fichier,"%i",ePalmares[eNombreJoueurCompteur][0]);
			fputs(" ",fichier);
			fprintf(fichier,"%i",ePalmares[eNombreJoueurCompteur][1]);
			fputs("\n",fichier);
		}
	}	
	fclose(fichier);

	/* Créer un fichier tampon pour donner le feu vert au second processus */
	fichier = fopen("tampon.txt", "w"); /* Créer le fichier en permission écriture */
	fclose(fichier);

}

void Vue_PalmaresAfficher (SDL_Surface* ecran){
	/* Lit le palmares dans un fichier et l'affiche à l'écran */

	FILE* fichier;
	int32_t ePalmares[4][2];
	int eNombreJoueurCompteur=0;
	int eCompteur=0;
	SDL_Surface *SDL_Texte = NULL, *SDL_Clean = NULL;
	char Classement[100] = "";
	int position=HAUTEUR_FENETRE+5;

	do /* si le fichier existe */
	{
		fichier = fopen("tampon.txt", "r");
	}
	while (fichier == NULL);
	fclose(fichier);
	remove("tampon.txt");

	fichier = fopen("classement.txt", "r");

	if (fichier != NULL){
		while(!feof(fichier)){
			fscanf(fichier, "%i", &ePalmares[eNombreJoueurCompteur][0]);
			fscanf(fichier, "%i", &ePalmares[eNombreJoueurCompteur][1]);
			eNombreJoueurCompteur++;
		}
	}

	fclose(fichier);

	remove ("classement.txt");

	SDL_Rect_Blanc(ecran,SDL_Clean, ESPACE_MENU, LARGEUR_FENETRE, 0, HAUTEUR_FENETRE); /* Nettoyage du menu */
	SDL_Flip(ecran);

	sprintf(Classement, "Classement");
	SDL_Ecrire(ecran, SDL_Texte, Classement, 5, position);

	for(eCompteur=eNombreJoueurCompteur-2;eCompteur>=0;eCompteur--){
		position+=15;
		sprintf(Classement,"Equipe %i : avec %i tours",ePalmares[eCompteur][0]+1,ePalmares[eCompteur][1]);
		SDL_Ecrire(ecran, SDL_Texte, Classement, 5, position);
	}
	SDL_Flip(ecran);

	SDL_FreeSurface(SDL_Texte);
	SDL_FreeSurface(SDL_Clean);

}


